﻿using System;
using System.Collections.Generic;
using System.Text;
using MySql.Data.MySqlClient;

namespace equinox_proto
{
    class ClienteModel
    {
        private int idCliente;
        private string codigoCliente;
        private string nombreReferencia;
        private string nombreContacto;
        private string correoCorp;
        private string correoContacto;
        private string telefonoCorp;
        private string telefonoContacto;
        private string razonSocial;
        private string ruc;
        private string direccion;
        private int tieneclub;

        public int Idcliente
        {
            get { return idCliente; }
            set { idCliente = value; }
        }
        public string CodigoCliente
        {
            get { return codigoCliente; }
            set { codigoCliente = value; }
        }
        public string NombreReferencia
        {
            get { return nombreReferencia; }
            set { nombreReferencia = value; }
        }
        public string NombreContacto
        {
            get { return nombreContacto; }
            set { nombreContacto = value; }
        }
        public string CorreoCorp
        {
            get { return correoCorp; }
            set { correoCorp = value; }
        }
        public string CorreoContacto
        {
            get { return correoContacto; }
            set { correoContacto = value; }
        }
        public string TelefonoCorp
        {
            get { return telefonoCorp; }
            set { telefonoCorp = value; }
        }
        public string TelefonoContacto
        {
            get { return telefonoContacto; }
            set { telefonoContacto = value; }
        }
        public string RazonSocial
        {
            get { return razonSocial; }
            set { razonSocial = value; }
        }
        public string Ruc
        {
            get { return ruc; }
            set { ruc = value; }
        }
        public string Direccion
        {
            get { return direccion; }
            set { direccion = value; }
        }
        public int Tieneclub
        {
            get { return tieneclub; }
            set { tieneclub = value; }
        }

        public static ClienteModel abrirCliente(int id)
        {
            ClienteModel cliente = new ClienteModel();
            GestorConexion gestor = GestorConexion.Instance;
            gestor.OpenConnection();
            MySqlConnection con = gestor.Connection;
            MySqlCommand cmd;
            cmd = new MySqlCommand("SELECT idcliente,codigoCliente, "+
                "nombreReferencia,nombreContacto,correoCorp,correoContacto, "+
                "telefonoCorp,telefonoContacto,razonSocial,ruc,direccion,tieneclub "+
                "FROM cliente WHERE idcliente=@id", con);
            cmd.Parameters.AddWithValue("@id", id);
            cmd.Prepare();
            MySqlDataReader res = cmd.ExecuteReader();
            
            if (res.Read())
            {
                cliente.Idcliente = res.GetInt32("idcliente");
                cliente.CodigoCliente = res.GetString("codigoCliente");
                cliente.NombreReferencia = res.GetString("nombreReferencia");
                cliente.NombreContacto = res.GetString("nombreContacto");
                cliente.CorreoCorp = res.GetString("correoCorp");
                cliente.CorreoContacto = res.GetString("correoContacto");
                cliente.TelefonoCorp = res.GetString("telefonoCorp");
                cliente.TelefonoContacto = res.GetString("telefonoContacto");
                cliente.RazonSocial = res.GetString("razonSocial");
                cliente.Ruc = res.GetString("ruc");
                cliente.Direccion = res.GetString("direccion");
                cliente.Tieneclub = res.GetInt32("tieneclub");
            }
            else
                cliente = null;
            res.Close();
            gestor.CloseConnection();
            return cliente;
        }
        public static void agregarCliente(ClienteModel clienteModel)
        {
            GestorConexion gestor = GestorConexion.Instance;
            gestor.OpenConnection();
            MySqlConnection con = gestor.Connection;
            MySqlCommand cmd;
            cmd = new MySqlCommand("Insert into cliente (idcliente,codigoCliente, " +
                "nombreReferencia,nombreContacto,correoCorp,correoContacto, " +
                "telefonoCorp,telefonoContacto,razonSocial,ruc,direccion,tieneclub) " +
                "values (@idcliente,@codigoCliente, " +
                "@nombreReferencia,@nombreContacto,@correoCorp,@correoContacto, " +
                "@telefonoCorp,@telefonoContacto,@razonSocial,@ruc,@direccion,@tieneclub)",con);
            cmd.Parameters.AddWithValue("@idcliente", clienteModel.Idcliente);
            cmd.Parameters.AddWithValue("@codigoCliente", clienteModel.CodigoCliente);
            cmd.Parameters.AddWithValue("@nombreReferencia", clienteModel.NombreReferencia);
            cmd.Parameters.AddWithValue("@nombreContacto", clienteModel.NombreContacto);
            cmd.Parameters.AddWithValue("@correoCorp", clienteModel.CorreoCorp);
            cmd.Parameters.AddWithValue("@correoContacto", clienteModel.CorreoContacto);
            cmd.Parameters.AddWithValue("@telefonoCorp", clienteModel.TelefonoCorp);
            cmd.Parameters.AddWithValue("@telefonoContacto", clienteModel.TelefonoContacto);
            cmd.Parameters.AddWithValue("@razonSocial", clienteModel.RazonSocial);
            cmd.Parameters.AddWithValue("@ruc", clienteModel.Ruc);
            cmd.Parameters.AddWithValue("@direccion", clienteModel.Direccion);
            cmd.Parameters.AddWithValue("@tieneclub", clienteModel.Tieneclub);
            cmd.Prepare();
            cmd.ExecuteNonQuery();
            gestor.CloseConnection();
        }
        public static void modificarCliente(ClienteModel clienteModel)
        {
            GestorConexion gestor = GestorConexion.Instance;
            gestor.OpenConnection();
            MySqlConnection con = gestor.Connection;
            MySqlCommand cmd;
            cmd = new MySqlCommand("update cliente set idcliente = @idcliente,codigoCliente = @codigoCliente, nombreReferencia = @nombreReferencia, "+
                "nombreContacto = @nombreContacto, correoCorp = @correoCorp,correoContacto = @correoContacto, telefonoCorp = @telefonoCorp, " +
                "telefonoContacto = @telefonoContacto,razonSocial = @razonSocial,ruc = @ruc,direccion = @direccion,tieneclub = @tieneclub",con);
            cmd.Parameters.AddWithValue("@idcliente", clienteModel.Idcliente);
            cmd.Parameters.AddWithValue("@codigoCliente", clienteModel.CodigoCliente);
            cmd.Parameters.AddWithValue("@nombreReferencia", clienteModel.NombreReferencia);
            cmd.Parameters.AddWithValue("@nombreContacto", clienteModel.NombreContacto);
            cmd.Parameters.AddWithValue("@correoCorp", clienteModel.CorreoCorp);
            cmd.Parameters.AddWithValue("@correoContacto", clienteModel.CorreoContacto);
            cmd.Parameters.AddWithValue("@telefonoCorp", clienteModel.TelefonoCorp);
            cmd.Parameters.AddWithValue("@telefonoContacto", clienteModel.TelefonoContacto);
            cmd.Parameters.AddWithValue("@razonSocial", clienteModel.RazonSocial);
            cmd.Parameters.AddWithValue("@ruc", clienteModel.Ruc);
            cmd.Parameters.AddWithValue("@direccion", clienteModel.Direccion);
            cmd.Parameters.AddWithValue("@tieneclub", clienteModel.Tieneclub);
            cmd.Prepare();
            cmd.ExecuteNonQuery();
            gestor.CloseConnection();
        }
        public static List<ClienteModel> buscarCliente(ClienteModel clienteModel)
        {
            List<ClienteModel> clientes = new List<ClienteModel>();
            GestorConexion gestor = GestorConexion.Instance;
            gestor.OpenConnection();
            MySqlConnection con = gestor.Connection;
            MySqlCommand cmd;
            cmd = new MySqlCommand("SELECT idcliente,codigoCliente, "+
                "nombreReferencia,nombreContacto,correoCorp,correoContacto, "+
                "telefonoCorp,telefonoContacto,razonSocial,ruc,direccion,tieneclub "+
                "FROM cliente "+
                (hayParametros(clienteModel) ? "WHERE " : "") +
                (clienteModel.CodigoCliente!=""?"codigoCliente like '%'+ @codigoCliente+ '%' , ":"")+
                (clienteModel.NombreReferencia!=""?"nombreReferencia like '%'+ @nombreReferencia+ '%' , ":"")+
                (clienteModel.NombreContacto!=""?"nombreContacto like '%'+ @nombreContacto+ '%' , ":"")+
                (clienteModel.RazonSocial!=""?"razonSocial like '%'+ @razonSocial+ '%' , ":"")+
                (clienteModel.Ruc!=""?"ruc like '%'+ @ruc+ '%' ":""), con);
            cmd.Parameters.AddWithValue("@codigoCliente", clienteModel.CodigoCliente);
            cmd.Parameters.AddWithValue("@nombreReferencia", clienteModel.NombreReferencia);
            cmd.Parameters.AddWithValue("@nombreContacto", clienteModel.NombreContacto);
            cmd.Parameters.AddWithValue("@razonSocial", clienteModel.RazonSocial);
            cmd.Parameters.AddWithValue("@ruc", clienteModel.Ruc);
            cmd.Prepare();
            MySqlDataReader res = cmd.ExecuteReader();
            //res.Read();
            while (res.Read())
            {
				ClienteModel cliente = new ClienteModel();
                cliente.Idcliente = res.GetInt32("idcliente");
                cliente.CodigoCliente = res.GetString("codigoCliente");
                cliente.NombreReferencia = res.GetString("nombreReferencia");
                cliente.NombreContacto = res.GetString("nombreContacto");
                cliente.CorreoCorp = res.GetString("correoCorp");
                cliente.CorreoContacto = res.GetString("correoContacto");
                cliente.TelefonoCorp = res.GetString("telefonoCorp");
                cliente.TelefonoContacto = res.GetString("telefonoContacto");
                cliente.RazonSocial = res.GetString("razonSocial");
                cliente.Ruc = res.GetString("ruc");
                cliente.Direccion = res.GetString("direccion");
                cliente.Tieneclub = res.GetInt32("tieneclub");
				clientes.Add(cliente);
                //res.NextResult();
            }
            res.Close();
            gestor.CloseConnection();
            return clientes;
        }

        private static bool hayParametros(ClienteModel clienteModel)
        {
            return clienteModel.CodigoCliente != "" &&
                clienteModel.NombreReferencia != "" &&
                clienteModel.NombreContacto != "" &&
                clienteModel.RazonSocial != "" &&
                clienteModel.Ruc != "" ;
        }
	}
}
